In computing, increased performance is generally desirable. Increased performance is often provided via increased costs of the materials used. However, increased performance can also be achieved through more efficient use of materials. Efficient use of materials has the added benefit of usually having a lower marginal cost to achieve performance relative to sinking resources into the materials/hardware cost as mentioned.
To facilitate efficient use of hardware, operations on computing platforms are measured and monitored. Performance data for processors is needed for users that wish to monitor and enhance the performance of the system as it is executing software. Many hardware devices have built in performance monitoring capabilities. Indeed, many processors have hardware performance counters in multiple places on the chip. Performance monitors are often configured to look for and count certain operations that are relevant to performance. At this point, the performance data is captured in counters but still within the computing system and not yet available to be acquired and considered by a user. When the performance counters are full, an interrupt is generated such that the computing system can retrieve the data and clear the counter to be able to collect more data. An interrupt is a signal to the processor emitted by hardware or software indicating an event that needs immediate attention. An interrupt alerts the processor to a high-priority condition requiring the interruption of the current code the processor is executing (thread). The processor responds by suspending its current activities, saving its state, and executing a small program called an interrupt handler (or interrupt service routine, ISR) to deal with the event. This interruption is temporary, and after the interrupt handler finishes, the processor resumes execution of the previous thread. The interrupt allows performance counter data to be output on a set of breakpoint pins which are often a serial bus. Such interrupts are handled one at a time (serially) for each hardware block that has such a counter.
The retrieved data is then stored in a file on non-volatile memory for later retrieval by a user. The generation of an interrupt, as its name implies, interrupts operation of the computing entity to allow the retrieval of the performance data. Such interruption, necessarily impacts the performance of the operations that was interrupted. Thus, the very fact that performance is measured necessarily alters the underlying process being measured. In certain circles, this effect is referred to as an “observer effect.” Accordingly, what is needed is a way to measure performance that lessens, minimizes, or eliminates the observer effect in performance monitoring for computing operations.